home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / tool / watanabe / medit / medit_b.bas < prev    next >
BASIC Source File  |  1995-01-22  |  5KB  |  116 lines

  1. 60000 '
  2. 60010 '『文字編集サブルーチン  TYPE B』使用例
  3. 60020   CLEAR ,,1024,100000,6,0:LOADM"keyclear.rex",0
  4. 60030   CONSOLE 0,24,2:COLOR 0,7:CLS
  5. 60040   LOCATE 1,10:PRINT "文字を編集してください。"
  6. 60050   COLOR 1:LINE(0,463)-(639,479),PSET,0,BF,0
  7. 60060   E_文字$="文字列編集サブルーチン TYPE B  v1.02  (C)渡辺 良一"
  8. 60070   E_字数=255:E_X=25:E_Y=10
  9. 60080   E_CR0=15:E_CR1=10
  10. 60090   GOSUB *文字編集:END
  11. 60100 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  12. 60110 '★              プログラム開発支援シリーズ第5弾        ★
  13. 60120 '★            文字列編集サブルーチン    TYPE B  v1.02             ★
  14. 60130 '★                              94年10月14日(金)  (C)渡辺 良一 ★
  15. 60140 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  16. 60150 '
  17. 60160 '変数紹介(先頭の『E_』は省略)
  18. 60170 '  文字$,M$     ……… 編集する文字列
  19. 60180 '  X,Y          ……… 文字を表示する文字座標
  20. 60190 '  字数         ……… 編集する文字の最大の長さ(半角計算)
  21. 60200 '  CR0          ……… 背景色
  22. 60210 '  CR1          ……… カーソルの色
  23. 60220 '  CR           ……… カーソル移動時に使用
  24. 60230 '  L,M,N,X2,Y2  ……… 文字表示時に使用(L,M,Nは↓でも使用)
  25. 60240 '  X3,Y3,Z      ……… カーソルを表示する時に使用
  26. 60250 '  C            ……… カーソルの文字列中の位置(文字数で)
  27. 60260 '  I,I2         ……… カーソルを移動させる文字座標
  28. 60270 '  K$,K         ……… 入力された文字とそのキャラクタコード
  29. 60280 '
  30. 60290 *文字編集
  31. 60300   CALLM 0
  32. 60310   GOSUB *E_文字表示
  33. 60320   E_X2=LEN(E_文字$):E_C=KLEN(E_文字$)
  34. 60330   GOSUB *E_表示
  35. 60340 *E_INKEY
  36. 60350   E_K$=INKEY$
  37. 60360   IF E_K$="" THEN *E_INKEY
  38. 60370   E_K=ASC(E_K$)
  39. 60380   '  ↓実行キー
  40. 60390   IF E_K=13 THEN GOSUB *E_消す:RETURN
  41. 60400   IF E_K=24 THEN GOSUB *E_消す:RETURN '復帰する場所を指定
  42. 60410   '  ↑取消キー
  43. 60420   IF E_K=5 AND E_X2<LEN(E_文字$) THEN *E_一括削除
  44. 60430   IF E_K=8 AND E_C >0            THEN *E_後退
  45. 60440   IF E_K=127 THEN IF E_X2<E_字数 THEN *E_削除 ELSE *E_INKEY
  46. 60450   IF E_K=28 AND E_X2<LEN(E_文字$) THEN E_I= 1:GOTO *E_左右移動 '右
  47. 60460   IF E_K=29 AND E_C >0            THEN E_I=-1:GOTO *E_左右移動 '左
  48. 60470   IF E_K<32 THEN *E_INKEY    '↓日本語文字なら次も入力する
  49. 60480   IF (127<E_K AND E_K<160) OR 223<E_K THEN E_K$=E_K$+INKEY$
  50. 60490   '**** 文字入力 *********
  51. 60500   IF LEN(E_文字$)+LEN(E_K$)>E_字数 THEN BEEP:CALLM 0:GOTO *E_INKEY
  52. 60510   E_文字$=KLEFT$(E_文字$,E_C)+E_K$+KMID$(E_文字$,E_C+1)
  53. 60520   E_I=1:E_I2=LEN(E_K$):GOSUB *E_文字表示:GOTO *E_移動
  54. 60530 '
  55. 60540 *E_一括削除
  56. 60550   E_文字$=KLEFT$(E_文字$,E_C)+STRING$(LEN(E_文字$)-E_X2,32)
  57. 60560   GOSUB *E_文字表示
  58. 60570   E_文字$=KLEFT$(E_文字$,E_C)
  59. 60580   GOTO *E_INKEY
  60. 60590 *E_後退
  61. 60600   IF KTYPE(E_文字$,E_C) THEN E_I2=-2 ELSE E_I2=-1
  62. 60610   E_M$=E_文字$:E_文字$=KLEFT$(E_M$,E_C-1)
  63. 60620   IF E_C<255 THEN E_文字$=E_文字$+KMID$(E_M$,E_C+1)
  64. 60630   GOSUB *E_文字表示:E_I=-1:GOTO *E_移動
  65. 60640 *E_削除
  66. 60650   E_M$=E_文字$:E_文字$=KLEFT$(E_M$,E_C)
  67. 60660   IF E_C<254 THEN E_文字$=E_文字$+KMID$(E_M$,E_C+2)
  68. 60670   GOSUB *E_文字表示
  69. 60680   GOTO *E_INKEY
  70. 60690 *E_左右移動       '↓右移動なら+1 ↓日本語文字ならば
  71. 60700   IF KTYPE(E_文字$,29-E_K +E_C) THEN E_I2=E_I*2 ELSE E_I2=E_I
  72. 60710 '************************
  73. 60720 *E_移動
  74. 60730   E_C=E_C+E_I
  75. 60740   GOSUB *E_消す
  76. 60750   E_CR=E_CR1:E_X2=E_X2+E_I2
  77. 60760   GOSUB *E_表示
  78. 60770   GOTO *E_INKEY
  79. 60780 *E_消す:E_CR=E_CR0:GOSUB *E_書く:RETURN 'カーソル消す
  80. 60790 *E_表示  '******カーソル表示******
  81. 60800   E_X3=E_X+E_X2:E_Y3=0:E_N=0:E_Z=0
  82. 60810   WHILE E_X3>79
  83. 60820     IF E_Y3=0 THEN E_L=E_X ELSE E_L=0
  84. 60830     E_M=ASC(MID$(E_文字$,80-E_L+E_Z,1))
  85. 60840     IF (127<E_M AND E_M<160) OR 223<E_M THEN
  86. 60850       E_M=ASC(MID$(E_文字$,79-E_L+E_Z,1))
  87. 60860       E_N=1:IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=0
  88. 60870     ENDIF
  89. 60880     E_Z=E_Z+80-E_N-E_L:E_X3=E_X3-80+E_N
  90. 60890     E_N=0:E_Y3=E_Y3+1
  91. 60900   WEND
  92. 60910   E_CR=E_CR1:GOSUB *E_書く
  93. 60920 RETURN
  94. 60930 *E_書く:LINE(E_X3*8,(E_Y+E_Y3)*19)-STEP(1,15),PSET,%E_CR,B:RETURN
  95. 60940 *E_文字表示
  96. 60950   E_M$=E_文字$:E_Y2=0
  97. 60960   IF LEN(E_M$)=0 THEN LOCATE E_X,E_Y:PRINT" ";" "
  98. 60970   WHILE LEN(E_M$)
  99. 60980     E_N=LEN(E_M$)
  100. 60990     IF E_Y2=0 THEN E_L=E_X ELSE E_L=0
  101. 61000     LOCATE E_L,E_Y+E_Y2
  102. 61010     IF LEN(E_M$)+E_L<=80 THEN
  103. 61020       PRINT E_M$;" ";" ":E_M$=""
  104. 61030     ELSE
  105. 61040       E_M=ASC(MID$(E_M$,80-E_L,1))
  106. 61050       IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=0 ELSE E_N=1
  107. 61060       E_M=ASC(MID$(E_M$,79-E_L,1))
  108. 61070       IF (127<E_M AND E_M<160) OR 223<E_M THEN E_N=1
  109. 61080       PRINT LEFT$(E_M$,79+E_N-E_L);
  110. 61090       IF E_N=0 THEN PRINT" "
  111. 61100       E_M$=MID$(E_M$,80+E_N-E_L)
  112. 61110       E_Y2=E_Y2+1
  113. 61120     ENDIF
  114. 61130   WEND
  115. 61140   RETURN
  116.